package com.texaco.chapasFutbol.entidades;

import org.andengine.engine.handler.physics.PhysicsHandler;
import org.andengine.entity.modifier.MoveModifier;
import org.andengine.input.touch.TouchEvent;
import org.andengine.opengl.texture.region.ITextureRegion;
import org.andengine.opengl.vbo.VertexBufferObjectManager;
import org.andengine.util.debug.Debug;
import org.andengine.util.modifier.ease.EaseStrongOut;

import com.texaco.chapasFutbol.ChapasFutbolActivity;

/**
 * Clase que implementa el sprite de las chapas. implementará aquellos métodos
 * referente a las chapas, como lanzar o golpear, tendrá los atributos
 * referentes a las chapas, como podría ser imagen de la chapa, y
 * caracteristicas propias de un jugador de futbol, como puede ser potencia de
 * disparo.
 * 
 * @author texaco
 * 
 */
public class Chapa extends CFSprite {
	public final static int HEIGHT = 104;
	public final static int WIDTH = 104;

	// private PhysicsHandler physic;

	public Chapa(int xPos, int yPos, ITextureRegion shape,
			VertexBufferObjectManager vertex, Game game, float damping) {
		super(xPos, yPos, shape, vertex, game, damping);
		// physic = new PhysicsHandler(this);
		// this.registerUpdateHandler(physic);
	}

	@Override
	public boolean onAreaTouched(final TouchEvent pSceneTouchEvent,
			final float pTouchAreaLocalX, final float pTouchAreaLocalY) {

		if (game.isJuegoActivo()) {

			/*
			 * Crear una nueva chapa y seguirla Hay que detectar si se ha
			 * soltado o se está arrastrando. en el momento que la suelte,
			 * requiere mover la chapa generadora.
			 */
			if ((this instanceof ChapaLocal && game.isTurnoLocal())
					|| (this instanceof ChapaVisitante && game
							.isTurnoVisitante())) {
				if (pSceneTouchEvent.isActionDown()) {
					Debug.d("Se pulsa la chapa");
					/*
					 * Se crea la chapa fantasma.
					 */
					game.chapaPulsada(this, pSceneTouchEvent);// FIXME
				} else if (pSceneTouchEvent.isActionCancel()) {
					Debug.d("Se cancela");
					// no se usa
				} else if (pSceneTouchEvent.isActionMove()) {
					Debug.d("Se Mueve");
					/*
					 * Mover la chapa fantasma.
					 */
					game.mueveChapaFantasma(pSceneTouchEvent);
				} else if (pSceneTouchEvent.isActionOutside()) {
					Debug.d("Se sale fuera");
					// no se usa
				} else if (pSceneTouchEvent.isActionUp()) {
					Debug.d("Se suelta");
					/*
					 * Quitar la chapa fantasma y mover el sprite actual.
					 */
					game.chapaSoltada();
					mover(pSceneTouchEvent);
				}
			}
		}
		return true;
	}

	/**
	 * Mueve la chapa una vez que se pulsa.
	 * 
	 * @param pSceneTouchEvent
	 */
	public void mover(TouchEvent pSceneTouchEvent) {
		Debug.d("Moviendo chapa");
		Debug.d("Posicion X: " + this.getX() + " Posicion Y: " + this.getY());
		Debug.d("Posicion evento X: " + pSceneTouchEvent.getX()
				+ " Posicion Y: " + pSceneTouchEvent.getY());
		float diferenceX = this.getX() + WIDTH / 2 - pSceneTouchEvent.getX();
		float diferenceY = this.getY() + HEIGHT / 2 - pSceneTouchEvent.getY();

		Debug.d("Diferencia X: " + diferenceX + " Diferencia Y: " + diferenceY);

		super.mover(diferenceX, diferenceY);
	}
}
